package co.edu.uniandes.ecos.itera.tsp.pruebas;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;
import junit.framework.TestCase;
import co.edu.uniandes.ecos.itera.tsp.accesodatos.InterrupcionDAL;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.Avance;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.Loc;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.LogT;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.Tiempos;
import co.edu.uniandes.ecos.itera.tsp.mundo.Interrupcion;


/**
 * @author Diego Forero
 * Realiza la prueba de la logica de acceso a datos para Interrupcion
 */
@Tiempos({
	@LogT(date="2011-03-19", min=43, taskId=23)
})
@Avance(taskId=23, termino='S')
public class PruebaInterrupcionDAL extends TestCase{
	private InterrupcionDAL interrupciones;
	private List<Interrupcion> listadoInterrupciones;
	/**
	 * Prueba completa; inicializando, serializando y deserializando
	 */
	@Loc(size=3, taskId=23)
	public void testCompleto()
	{
		testInterrupcionDAL();
		testSerializar();
		testDeSerializar();		
	}

	@Loc(size=3, taskId=23)
	@Test
	public void testInterrupcionDAL() {
		if(interrupciones==null){
			interrupciones = new InterrupcionDAL();
		}
	}
	/**
	 * Prueba la serializacion
	 */
	@Loc(size=18, taskId=23)
	@Test
	public void testSerializar() {
		listadoInterrupciones  = this.generarInterrupciones();
		this.testInterrupcionDAL();
		System.out.println("INTERRUPCION A SERIALIZAR:");
		for(Interrupcion prueba: listadoInterrupciones)
		{
			System.out.println("DESCRIPCION:"+prueba.getDescription());			
			System.out.println("ID:"+prueba.getIntId());
		}
		try {
			interrupciones.serializar((ArrayList<Interrupcion>)listadoInterrupciones);
		} catch (Exception e) {
			e.printStackTrace();
			assert false: e.getMessage() + e.getCause();
		}
		finally
		{
			listadoInterrupciones = null;
		}
	}
	/**
	 * Prueba la deserializacion
	 */
	@Loc(size=17, taskId=23)
	@Test
	public void testDeSerializar() {
		this.testInterrupcionDAL();
		try {
			this.listadoInterrupciones = interrupciones.deSerializar();
			assert listadoInterrupciones!=null : "No se han cargado defectos";
			System.out.println("DEFECTOS DESERIALIZADOS:");
			for(Interrupcion prueba: listadoInterrupciones)
			{
				System.out.println("DESCRIPCION:"+prueba.getDescription());			
				System.out.println("ID:"+prueba.getIntId());				
			}
		} catch (Exception e) {
			assert false: e.getMessage();
		}
		finally
		{
			
			listadoInterrupciones = null;
		}

	}
		
	@Loc(size=6, taskId=23)
	public List<Interrupcion> generarInterrupciones()
	{
		List<Interrupcion> interrupcionPrueba = new ArrayList<Interrupcion>();
		for (int i = 0; i < (Math.random()*10); i++ )		{
			Interrupcion prueba = new Interrupcion((i),("Descripcion"+i));
			interrupcionPrueba.add(prueba);
		}
		return interrupcionPrueba;	
	}
}
